home *** CD-ROM | disk | FTP | other *** search
- LaunchAction: Clr.W _ErrorCode ;there _shouldn't_ be any errors with this routine
-
- Tst.B _Successful ;did one of the check routines succeed?
- Bne.S .Successful ;if so, then run the commandline
-
- Tst.L _Suffix ;the following six lines are simply to make
- Bne CheckLoop ;sure that only the DEFUALT class is run
- Tst.L _Name ;if none of the check routines actually
- Bne CheckLoop ;managed to match anything out of the file
- Tst.L _Offset
- Bne CheckLoop
- Bra.S Launch
-
- .Successful Cmp.B #MODE_TWO,_Mode ;does the command require at least two correct entries
- Bne.S Launch ;if not, then ignore the check
- Cmp.B #2,_Successful ;is the number of correct entries greater or equal to 2
- Blt CheckLoop ;if not, then check for a new class
-
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Launch: Tst.L _WBMessage ;were we launhced from workbench?
- Beq.S .NoWB ;if not, ignore the following
- CloneWbPath _WBMessage(PC) ;get workbench paths
- Move.L D0,_WBPaths ;save this for use in NP_Path
-
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- .NoWB Lea _SystemTags,A4 ;list of custom options for the launching of programs
-
- Move.L _Stack(PC),D1 ;was STACK available
- Tst.L D1 ;was the tag actually mentioned in the class config
- Beq.S .NoStack
-
- Move.L #WorkData,D2 ;and a place to strore a number
- CALL StrToLong,DOS ;convert the string into a longword
- Cmp.L #-1,D0 ;fail if something went wrong
- Beq.S .NoStack ;but don't set the tag to anything
-
- Move.L #NP_StackSize,(A4)+ ;the tag ID for the stack
- Move.L WorkData,(A4)+ ;the amount of stack to allocate
- .NoStack
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Move.L _Pri(PC),D1 ;was PRI found in the class entry
- Tst.L D1
- Beq.S .NoPri ;if not, skip the tag entry
-
- Move.L #WorkData,D2 ;and a place to strore a number
- CALL StrToLong,DOS ;convert the string into a longword
- Cmp.L #-1,D0 ;fail if something went wrong
- Beq.S .NoPri ;but don't set the tag to anything
-
- Move.L WorkData,D0 ;value returned by StrToLong()
- Cmp.L #127,D0 ;maximum of 127
- Bgt.S .NoPri ;no entry if they mucked up
- Cmp.L #-127,D0 ;minimum of -127
- Blt.S .NoPri ;again, skip it if they put in a wrong number
-
- Move.L #NP_Priority,(A4)+ ;the tag ID for PRI
- Move.L D0,(A4)+ ;the number we got from the class entry
- .NoPri
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Move.L _WBPaths(PC),D0 ;is there an entry from CloneWbPath()
- Tst.L D0
- Beq.S .NoPaths ;if not, then skip the tag entry
-
- Move.L #NP_Path,(A4)+ ;the tag ID for a custom path setting
- Move.L D0,(A4)+ ;the paths returned by Ralph's routines
- .NoPaths
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Move.L #TAG_DONE,(A4) ;end of the list
-
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Move.L _OutputBuffer(PC),A1 ;clean up the memory allocated to hold
- Move.L _OutputBufLen(PC),D0 ;the data file so the user actually has
- Cmp.L #0,A1 ;some memory to work with when they try
- Beq.S .NoFileMemory ;to view the file
- CALL FreeMem,EXEC
- Clr.L _OutputBuffer ;clear data space so we don't try and free it upon exit
- .NoFileMemory
-
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Move.L _Action(PC),A0 ;the program to run, as provided by the class entry
- Lea CommandLine,A1 ;space to hold the final commandline
- .CopyAction Move.B (A0)+,D0 ;copies a string
- Cmp.B #'%',D0 ;was a % found in the string
- Bne.S .IgnorePercent ;if not, then don't insert the filename
-
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Move.B (A0),D0 ;get the character after the %
- Cmp.B #'s',D0 ;is it an s for string (ie, insert filename here)
- Bne.S .IgnorePercent ;if not, then don't insert the filename
-
- Tst.B _Quote ;are we ment to include quotes
- Bne.S .NoFNQuote ;if not then jump to the copy routine
- Move.B #'"',(A1)+ ;insert a quote
-
- .NoFNQuote Move.L _FileName(PC),A2 ;the filename specified
- Addq #1,A0 ;jump over the s in the action line
- .CopyFName Move.B (A2)+,D0 ;gets a character
- Move.B D0,(A1)+ ;puts it into the final commandline
- Bne.S .CopyFName ;if it wasn't the end, then get another character
- Moveq #1,D1 ;mark that we have already inserted the filename into the commandline
-
- Subq #1,A1
-
- Tst.B _Quote ;do we have to insert a quote
- Bne.S .CopyAction ;if not, then carry on with the rest of the action entry
- Move.B #'"',(A1)+ ;replace the space with a "
- Bra.S .CopyAction ;carry on copying the rest of the action entry
-
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- .IgnorePercent Move.B D0,(A1)+ ;put the character into the command stream
- Bne.S .CopyAction ;if it wasn't a zero, then go get another charcter
-
- Cmp.B #1,D1 ;have we already inserted the filename
- Beq.S .No2ndAction ;if so, then don't do it again
- Move.B #' ',-1(A1) ;place a space after the command
-
- Tst.B _Quote ;quote needed?
- Bne.S .NoFNQuote2 ;if not, then don't put one in
- Move.B #'"',(A1)+ ;throw a quote in before the start of the filename
-
- .NoFNQuote2 Move.L _FileName(PC),A0 ;the name of the file to be viewed
- Bsr StripQuotes ;copy the filename into the final commandline
-
- Tst.B _Quote ;quote needed to clean things up?
- Bne.S .No2ndAction ;if not, then don't put one in
- Move.B #'"',-1(A1) ;close the pair of quotes surrounding the filename
- .No2ndAction Clr.B (A1) ;mark the end of the commandline
-
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Move.L #CommandLine,D1 ;the commandline to be run
- Move.L #_SystemTags,D2 ;any special tags to be attached to the newly created Process
- CALL SystemTagList,DOS ;run the commandline
-
- ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Cmp.L #-1,D0 ;did System() return an error
- Bne.S .NoWBPaths ;if not, then don't worry about cleaning up any possible paths
-
- Tst.L _WBPaths ;if we were launched from workbench then the paths should have been set
- Beq.S .NoWBPaths ;if not, then don't try and free them up
- FreeWbPath _WBPaths(PC) ;free up the workbench paths using Ralph's routine
-
- .NoWBPaths
- Clr.L _WBPaths ;clear the paths entry if we are going to use it again later on
-